home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / EasyPLUGINs / source / multitext.e < prev    next >
Encoding:
Text File  |  1998-05-25  |  8.7 KB  |  336 lines

  1.  
  2. /*
  3.  
  4.     $VER: multitext_plugin 1.5 (25.5.98)
  5.  
  6.     Author:         Ali Graham ($01)
  7.                     <agraham@hal9000.net.au>
  8.  
  9.     PLUGIN id:      $02
  10.  
  11.     Desc.:          TEXT replacement with a number of features.
  12.  
  13.     Tags:           PLA_MultiText_Text                   [I..]
  14.                     PLA_MultiText_Highlight              [IS.]
  15.                     PLA_MultiText_ThreeD                 [IS.]
  16.                     PLA_MultiText_Justification          [IS.]
  17.                     PLA_MultiText_DrawBar                [IS.]
  18.                     PLA_MultiText_Font                   [I..]
  19.                     PLA_MultiText_Disabled               [IS.]
  20.                     PLA_MultiText_ShowWhenDisabled       [IS.]
  21.                     PLA_MultiText_GapHorizontal          [i..]
  22.                     PLA_MultiText_GapVertical            [i..]
  23.                     PLA_MultiText_Resize                 [I..]
  24.  
  25.     Values:         PLV_MultiText_JustifyCenter
  26.                     PLV_MultiText_JustifyLeft
  27.                     PLV_MultiText_JustifyRight
  28.  
  29. */
  30.  
  31. OPT MODULE, PREPROCESS, OSVERSION=37
  32.  
  33. ->> multitext_plugin: Modules
  34.  
  35. MODULE 'tools/easygui', 'graphics/text', 'tools/ghost',
  36.        'intuition/intuition', 'intuition/screens',
  37.        'graphics/rastport'
  38.  
  39. MODULE 'utility', 'utility/tagitem'
  40.  
  41. -><
  42.  
  43. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  44.  
  45. ->> multitext_plugin: Definitions
  46. EXPORT OBJECT multitext_plugin OF plugin PRIVATE
  47.  
  48.     contents:PTR TO LONG
  49.     highlight
  50.     three_d
  51.     justification
  52.     draw_bar
  53.     font:PTR TO textattr
  54.     disabled
  55.     disabled_show
  56.     resize
  57.     gap_h
  58.     gap_v
  59.  
  60.     num_lines
  61.  
  62.     texts_width
  63.     texts_height
  64.  
  65.     default_font:PTR TO textattr
  66.  
  67. ENDOBJECT
  68.  
  69. -> PROGRAMMER_ID | MODULE_ID
  70. ->      $01      |   $02
  71.  
  72. EXPORT ENUM PLA_MultiText_Text=$81020001,        ->[I..]
  73.             PLA_MultiText_Highlight,             ->[IS.]
  74.             PLA_MultiText_ThreeD,                ->[IS.]
  75.             PLA_MultiText_Justification,         ->[IS.]
  76.             PLA_MultiText_DrawBar,               ->[IS.]
  77.             PLA_MultiText_Font,                  ->[I..]
  78.             PLA_MultiText_Disabled,              ->[IS.]
  79.             PLA_MultiText_ShowWhenDisabled,      ->[IS.]
  80.             PLA_MultiText_GapHorizontal,         ->[i..]
  81.             PLA_MultiText_GapVertical,           ->[i..]
  82.             PLA_MultiText_Resize                 ->[I..]
  83.  
  84. EXPORT ENUM PLV_MultiText_JustifyCenter=0,
  85.             PLV_MultiText_JustifyLeft,
  86.             PLV_MultiText_JustifyRight
  87.  
  88. -><
  89.  
  90. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  91.  
  92. ->> multitext_plugin: multitext()
  93. PROC multitext(tags=NIL:PTR TO tagitem) OF multitext_plugin
  94.  
  95.     IF utilitybase
  96.  
  97.         self.contents       := GetTagData(PLA_MultiText_Text, [' '], tags)
  98.         self.highlight      := GetTagData(PLA_MultiText_Highlight, FALSE, tags)
  99.         self.three_d        := GetTagData(PLA_MultiText_ThreeD, FALSE, tags)
  100.         self.font           := GetTagData(PLA_MultiText_Font, NIL, tags)
  101.         self.justification  := GetTagData(PLA_MultiText_Justification, PLV_MultiText_JustifyCenter, tags)
  102.         self.draw_bar       := GetTagData(PLA_MultiText_DrawBar, FALSE, tags)
  103.         self.disabled       := GetTagData(PLA_MultiText_Disabled, FALSE, tags)
  104.         self.disabled_show  := GetTagData(PLA_MultiText_ShowWhenDisabled, TRUE, tags)
  105.         self.resize         := GetTagData(PLA_MultiText_Resize, TRUE, tags)
  106.         self.gap_h          := GetTagData(PLA_MultiText_GapHorizontal, 2, tags)
  107.         self.gap_v          := GetTagData(PLA_MultiText_GapVertical, 1, tags)
  108.  
  109.     ELSE
  110.  
  111.         Raise("util")
  112.  
  113.     ENDIF
  114.  
  115.     IF self.contents THEN self.num_lines:=ListLen(self.contents)
  116.  
  117. ENDPROC
  118. -><
  119.  
  120. ->> multitext_plugin: set() & get()
  121.  
  122. PROC set(attr, value) OF multitext_plugin
  123.  
  124.     SELECT attr
  125.  
  126.         CASE PLA_MultiText_Highlight
  127.  
  128.             IF self.highlight<>value
  129.  
  130.                 self.highlight:=value
  131.  
  132.                 IF (self.disabled=FALSE) OR self.disabled_show THEN  self.draw(self.gh.wnd)
  133.  
  134.             ENDIF
  135.  
  136.         CASE PLA_MultiText_ThreeD
  137.  
  138.             IF self.three_d<>value
  139.  
  140.                 self.three_d:=value
  141.  
  142.                 IF (self.disabled=FALSE) OR self.disabled_show THEN  self.draw(self.gh.wnd)
  143.  
  144.             ENDIF
  145.  
  146.         CASE PLA_MultiText_Justification
  147.  
  148.             IF self.justification<>value
  149.  
  150.                 IF (value >= PLV_MultiText_JustifyCenter) AND (value <= PLV_MultiText_JustifyRight)
  151.  
  152.                     self.justification:=value
  153.  
  154.                     IF (self.disabled=FALSE) OR self.disabled_show THEN  self.draw(self.gh.wnd)
  155.  
  156.                 ENDIF
  157.  
  158.             ENDIF
  159.  
  160.         CASE PLA_MultiText_DrawBar
  161.  
  162.             IF self.draw_bar<>value
  163.  
  164.                 self.draw_bar:=value
  165.  
  166.                 IF (self.disabled=FALSE) OR self.disabled_show THEN  self.draw(self.gh.wnd)
  167.  
  168.             ENDIF
  169.  
  170.         CASE PLA_MultiText_Disabled
  171.  
  172.             IF self.disabled<>value
  173.  
  174.                 self.disabled:=value
  175.  
  176.                 self.draw(self.gh.wnd)
  177.  
  178.             ENDIF
  179.  
  180.         CASE PLA_MultiText_ShowWhenDisabled
  181.  
  182.             IF self.disabled_show<>value
  183.  
  184.                 self.disabled_show:=value
  185.  
  186.                 IF self.disabled THEN self.draw(self.gh.wnd)
  187.  
  188.             ENDIF
  189.  
  190.     ENDSELECT
  191.  
  192. ENDPROC
  193.  
  194. PROC get(attr) OF multitext_plugin IS -1, FALSE
  195.  
  196. -><
  197.  
  198. ->> multitext_plugin: draw()
  199. PROC draw(win:PTR TO window) OF multitext_plugin
  200.  
  201.     DEF justification, a, cursor_height,
  202.         left_side, right_side, text_start,
  203.         text_width, line_height,
  204.         font:PTR TO textattr
  205.  
  206.     IF win
  207.  
  208.         SetStdRast(win.rport)
  209.  
  210.         clear(win, self.x, self.y, self.xs, self.ys)
  211.  
  212.         IF (self.disabled=FALSE) OR self.disabled_show
  213.  
  214.             font:=(IF self.font THEN self.font ELSE self.default_font)
  215.  
  216.             justification:=self.justification
  217.  
  218.             cursor_height:=self.y + self.gap_h
  219.             line_height:=cursor_height + (font.ysize / 2)
  220.  
  221.             FOR a:=0 TO (self.num_lines-1)
  222.  
  223.                 left_side:=self.x + self.gap_h
  224.                 right_side:=self.x + self.xs - (self.gap_v + 1)
  225.  
  226.                 text_width:=IntuiTextLength([1, 0, RP_JAM1, 0, 0, font, self.contents[a], NIL]:intuitext)
  227.  
  228.                 SELECT justification
  229.  
  230.                     CASE PLV_MultiText_JustifyLeft
  231.  
  232.                         print_text(self, self.contents[a], font, left_side, cursor_height)
  233.                         IF self.draw_bar THEN draw_line((left_side + text_width + 4), right_side, line_height)
  234.  
  235.                     CASE PLV_MultiText_JustifyRight
  236.  
  237.                         IF self.draw_bar THEN draw_line(left_side, (right_side - (text_width + 4)), line_height)
  238.                         print_text(self, self.contents[a], font, (right_side - text_width), cursor_height)
  239.  
  240.                     DEFAULT
  241.  
  242.                         text_start:=left_side + (((right_side - left_side) - text_width) / 2) + 1
  243.  
  244.                         IF self.draw_bar THEN draw_line(left_side, (text_start - 4), line_height)
  245.                         print_text(self, self.contents[a], font, text_start, cursor_height)
  246.                         IF self.draw_bar THEN draw_line((text_start + text_width + 4), right_side, line_height)
  247.  
  248.                 ENDSELECT
  249.  
  250.                 cursor_height:=cursor_height + font.ysize + 2
  251.                 line_height:=cursor_height + (font.ysize / 2)
  252.  
  253.             ENDFOR
  254.  
  255.         ENDIF
  256.  
  257.         IF self.disabled THEN ghost(win, self.x, self.y, self.xs, self.ys)
  258.  
  259.     ENDIF
  260.     
  261. ENDPROC
  262. -><
  263.  
  264. ->> multitext_plugin: min_size() & will_resize()
  265. PROC min_size(font:PTR TO textattr, font_height) OF multitext_plugin
  266.  
  267.     DEF a
  268.  
  269.     self.texts_width:=0
  270.     self.texts_height:=0
  271.  
  272.     IF self.font
  273.  
  274.         font:=self.font
  275.         font_height:=self.font.ysize
  276.  
  277.     ENDIF
  278.  
  279.     FOR a:=0 TO (self.num_lines-1)
  280.  
  281.         self.texts_width:=Max(self.texts_width, IntuiTextLength([1, 0, RP_JAM1, 0, 0, font, self.contents[a], NIL]:intuitext))
  282.  
  283.         self.texts_height:=self.texts_height + font_height + 2
  284.  
  285.     ENDFOR
  286.  
  287. ENDPROC (self.texts_width + (self.gap_h * 2)), (self.texts_height + (self.gap_v * 2))
  288.  
  289. PROC will_resize() OF multitext_plugin IS (IF self.resize THEN COND_RESIZEX ELSE FALSE)
  290.  
  291. -><
  292.  
  293. ->> multitext_plugin: render()
  294.  
  295. PROC render(font:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF multitext_plugin
  296.  
  297.     self.default_font:=font
  298.  
  299.     self.draw(win)
  300.  
  301. ENDPROC
  302.  
  303. -><
  304.  
  305. ->> private to multitext_plugin.draw(): draw_line() & print_text()
  306. PROC draw_line(x1, x2, y)
  307.  
  308.     Line(x1, y, x2, y, 1)
  309.     Line(x1, y+1, x2, y+1, 2)
  310.  
  311. ENDPROC
  312.  
  313. PROC print_text(m:PTR TO multitext_plugin, text:PTR TO CHAR, font:PTR TO textattr, x, y)
  314.  
  315.     DEF bt_col, ft_col
  316.  
  317.     IF m.highlight
  318.  
  319.         bt_col:=1; ft_col:=2
  320.  
  321.     ELSE
  322.  
  323.         bt_col:=2; ft_col:=1
  324.  
  325.     ENDIF
  326.  
  327.     IF m.three_d THEN PrintIText(stdrast, [bt_col, 0, RP_JAM1, 1, 1, font, text, NIL]:intuitext, x, y)
  328.  
  329.     PrintIText(stdrast, [ft_col, 0, RP_JAM1, 0, 0, font, text, NIL]:intuitext, x, y)
  330.  
  331. ENDPROC
  332. -><
  333.  
  334.  
  335.  
  336.